import sys                                          #导入sys包
from typing import TextIO                           #导入TextIO类型
script,encoding,error = sys.argv                    #把sys包的argv模块解包，分别赋值给script,encoding,error

def main(language_file:TextIO, encoding, errors):   #定义一个main函数，参数分别是：
                                                    #language_file：文件类型，要解码的文件
                                                    #encoding：解码方式
                                                    #errors：错误类型
    line = language_file.readline()                 #定义变量line，存放文本文件里面的一行
    if line:                                        #如果line存在
        print_line(line, encoding, errors)          #调用print_line函数，打印line（文本文件中的一行）
        return main(language_file, encoding, errors)#递归调用main函数，直到文件打印完毕
                                                    #文件读取完毕，函数结束，不会再递归

def print_line(line: str, encoding, errors):        #定义print_line函数，参数分别如下：
                                                    #line：文本文件中的一行
                                                    #encoding：编码方式
                                                    #errors：错误
    # strip() 函数用于移除字符串开头和结尾的空白字符（包括换行符、空格、制表符等）。
    # 这里使用 strip() 移除 line 字符串开头和结尾的空白字符后赋值给 next_lang。
    next_lang = line.strip()                        #strip（）函数，用于去除一行里面的开头和结尾的空白字符后返回给next_lang
    # `errors = errors` 是关键字参数赋值操作，等号左边的 `errors` 是 `encode` 方法的参数名，
    # 等号右边的 `errors` 是传入该方法的变量，可直接写成 `errors` 简化代码
    raw_bytes = next_lang.encode(encoding, errors)  #encode方法，能把字符串变成字节序列，这是计算机能认识的方式
    cooked_string = raw_bytes.decode(encoding,errors = errors)#decode方法，能把二进制序列变成字符串，这是人类能认识的方式

    print(raw_bytes,"<===>",cooked_string)          #输出“二进制机器序列”"<===>"“字符串”

languages = open("languages.txt",encoding="utf-8")
main(languages,encoding,error)
